const path = require('path')
const glob = require('glob') // 用于筛选文件
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

const isProduction = process.env.NODE_ENV === 'prod'

// 工厂函数 - 配置pages实现多页面获取某文件夹下的html与js
function handleEntry(entry) {
    var entries = {}
    let entryTemplate = ''
    glob.sync(entry).forEach((item, index) => {
        console.log('!!!', item)
        entryTemplate = item.split('/').splice(-3)
        console.log('entryTemplate:', entryTemplate)
        console.log(item)
        entries[entryTemplate[1]] = {
            entry: item,
            // entry: 'src/' + entryTemplate[0] + '/' + entryTemplate[1] + '/' + 'app.js',
            template: 'public/index.html',
            // title: titles[chunk],
            title: '',
            filename: entryTemplate[1] + '.html',
            chunks: ['chunk-vendors', 'chunk-common', entryTemplate[1]]
        }
        pageNum = index
    })
    return entries
}
var pages = handleEntry('./src/views/**?/main.js')

module.exports = {
    pages: pages,
    publicPath: './', // 基本路径
    outputDir: 'dist', // 输出文件目录
    lintOnSave: false, // eslint-loader 是否在保存的时候检查
    productionSourceMap: false, // 生产环境是否生成 sourceMap 文件
    css: {
        extract: isProduction ? true : false, // 是否使用css分离插件 ExtractTextPlugin
        sourceMap: false,// 开启 CSS source maps?
    },
    // webpack配置
    chainWebpack: (config) => {
    },
    configureWebpack: (config) => { //如果这个值是一个对象，则会通过 webpack-merge 合并到最终的配置中。
        if (process.env.NODE_ENV === 'production') {
            // 为生产环境修改配置...
            const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i
            config.plugins.push(
                new CompressionWebpackPlugin({
                    filename: '[path].gz[query]',
                    algorithm: 'gzip',
                    test: productionGzipExtensions,
                    threshold: 10240,
                    minRatio: 0.8
                })
            )

        } else {
            // 为开发环境修改配置...
            new UglifyJsPlugin({
                uglifyOptions: {
                    warnings: false,
                    compress: {
                        drop_console: true,
                        drop_debugger: false,
                        pure_funcs: ['console.log'] // 移除console
                    }
                },
                sourceMap: false,
                parallel: true
            })
        }
        Object.assign(config, {
            // 开发生产共同配置
            resolve: {
                alias: {
                    '@': path.resolve(__dirname, './src'),
                    '@c': path.resolve(__dirname, './src/components'),
                } // 别名配置
            }
        })
    },
    // webpack-dev-server配置有些值像 host、port 和 https 可能会被命令行参数覆写。
    devServer: {
        open: process.platform === 'darwin', //自启动页面
        host: '0.0.0.0', // 允许外部ip访问
        port: 8022, // 端口
        https: false, // 启用https
        overlay: {
            warnings: true,
            errors: true
        },
        // proxy: {
        //     '/api': {
        //         target: 'https://webpack.js.org/configuration/dev-server/',
        //         changeOrigin: true, // 允许websockets跨域
        //         // ws: true,
        //         pathRewrite: {
        //             '^/api': ''
        //         }
        //     }
        // }
    },
    // 第三方插件配置
    pluginOptions: {}
}